export default function setting (art, danmuku) {
  const { option } = danmuku
  const {
    template: { $controlsCenter, $player },
    constructor: {
      SETTING_ITEM_WIDTH,
      utils: { removeClass, addClass, append, setStyle, tooltip, query, inverseClass, getIcon }
    }
  } = art

  setStyle($controlsCenter, 'display', 'flex')

  const $danmuOn = getIcon('danmu-on', '<?xml version="1.0" standalone="no"?>\n' +
    '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n' +
    '<svg viewBox="0 0 1152 1024" width="22" height="22" version="1.1" xmlns="http://www.w3.org/2000/svg">\n' +
    '<path fill="#fff" d="M311.466667 661.333333c0 4.266667-4.266667 8.533333-8.533334 12.8 0 4.266667 0 4.266667-4.266666 8.533334h-12.8c-4.266667 0-8.533333-4.266667-17.066667-8.533334-8.533333-8.533333-17.066667-8.533333-25.6-8.533333-8.533333 0-12.8 4.266667-17.066667 12.8-4.266667 12.8-8.533333 21.333333-4.266666 29.866667 4.266667 8.533333 12.8 17.066667 25.6 21.333333 17.066667 8.533333 34.133333 17.066667 46.933333 17.066667 12.8 0 21.333333-4.266667 34.133333-8.533334 8.533333-4.266667 17.066667-17.066667 25.6-29.866666 8.533333-12.8 12.8-34.133333 17.066667-55.466667 4.266667-21.333333 4.266667-51.2 4.266667-85.333333 0-12.8 0-21.333333-4.266667-29.866667 0-8.533333-4.266667-12.8-8.533333-17.066667-4.266667-4.266667-8.533333-8.533333-12.8-8.533333-4.266667 0-12.8-4.266667-21.333334-4.266667H273.066667s-4.266667-4.266667 0-8.533333l4.266666-38.4c0-4.266667 0-8.533333 4.266667-8.533333h46.933333c17.066667 0 25.6-4.266667 34.133334-12.8 8.533333-8.533333 12.8-21.333333 12.8-42.666667V324.266667c0-17.066667-4.266667-34.133333-8.533334-42.666667-12.8-12.8-25.6-17.066667-42.666666-17.066667H243.2c-8.533333 0-17.066667 0-21.333333 4.266667-4.266667 8.533333-4.266667 12.8-4.266667 25.6 0 8.533333 0 17.066667 4.266667 21.333333 4.266667 4.266667 12.8 8.533333 21.333333 8.533334h64c4.266667 0 8.533333 0 8.533333 4.266666v34.133334c0 8.533333 0 12.8-4.266666 12.8 0 0-4.266667 4.266667-8.533334 4.266666h-34.133333c-8.533333 0-12.8 0-21.333333 4.266667-4.266667 0-8.533333 4.266667-8.533334 4.266667-4.266667 4.266667-8.533333 12.8-8.533333 17.066666 0 8.533333-4.266667 17.066667-4.266667 25.6l-8.533333 72.533334v29.866666c0 8.533333 4.266667 12.8 8.533333 17.066667 4.266667 4.266667 8.533333 4.266667 17.066667 8.533333h68.266667c4.266667 0 8.533333 0 8.533333 4.266667s4.266667 8.533333 4.266667 17.066667c0 21.333333 0 42.666667-4.266667 55.466666 0 8.533333-4.266667 21.333333-8.533333 25.6zM896 486.4c-93.866667 0-174.933333 51.2-217.6 123.733333h-106.666667v-34.133333H640c21.333333 0 34.133333-4.266667 42.666667-12.8 8.533333-8.533333 12.8-21.333333 12.8-42.666667V358.4c0-21.333333-4.266667-34.133333-12.8-42.666667-8.533333-8.533333-21.333333-12.8-42.666667-12.8 0-4.266667 4.266667-4.266667 4.266667-8.533333-4.266667 0-4.266667-4.266667-4.266667-4.266667 4.266667-12.8 8.533333-21.333333 4.266667-25.6 0-8.533333-4.266667-12.8-12.8-21.333333-8.533333-4.266667-17.066667-4.266667-21.333334-4.266667-8.533333 4.266667-12.8 8.533333-21.333333 21.333334-4.266667 8.533333-8.533333 12.8-12.8 21.333333-4.266667 8.533333-8.533333 12.8-12.8 21.333333H512c-4.266667-8.533333-8.533333-17.066667-8.533333-21.333333-4.266667-8.533333-8.533333-12.8-12.8-21.333333-4.266667-12.8-12.8-17.066667-21.333334-17.066667s-17.066667 0-25.6 8.533333c-8.533333 8.533333-12.8 12.8-12.8 21.333334s0 17.066667 8.533334 25.6l4.266666 4.266666 4.266667 4.266667c-17.066667 0-29.866667 4.266667-38.4 12.8-8.533333 4.266667-12.8 21.333333-12.8 38.4v157.866667c0 21.333333 4.266667 34.133333 12.8 42.666666 8.533333 8.533333 21.333333 12.8 42.666667 12.8H512v34.133334H413.866667c-12.8 0-21.333333 0-25.6 4.266666-4.266667 4.266667-8.533333 8.533333-8.533334 21.333334v17.066666c0 4.266667 4.266667 8.533333 4.266667 8.533334 4.266667 0 4.266667 4.266667 8.533333 4.266666H512v55.466667c0 12.8 4.266667 21.333333 8.533333 25.6 4.266667 4.266667 12.8 8.533333 21.333334 8.533333 12.8 0 21.333333-4.266667 25.6-8.533333 4.266667-4.266667 4.266667-12.8 4.266666-25.6v-55.466667h81.066667c-8.533333 25.6-12.8 51.2-12.8 76.8 0 140.8 115.2 256 256 256s256-115.2 256-256-115.2-251.733333-256-251.733333z m-328.533333-128h55.466666c4.266667 0 4.266667 0 4.266667 4.266667v46.933333h-59.733333V358.4z m0 102.4h59.733333V512h-55.466667v-51.2zM512 516.266667h-55.466667V465.066667H512v51.2z m0-102.4h-59.733333V366.933333v-4.266666H512v51.2z m384 499.2c-93.866667 0-170.666667-76.8-170.666667-170.666667s76.8-170.666667 170.666667-170.666667 170.666667 76.8 170.666667 170.666667-76.8 170.666667-170.666667 170.666667z"  />\n' +
    '<path fill="#fff" d="M951.466667 669.866667l-72.533334 72.533333-29.866666-25.6c-17.066667-17.066667-42.666667-12.8-59.733334 4.266667-17.066667 17.066667-12.8 42.666667 4.266667 59.733333l59.733333 51.2c8.533333 8.533333 17.066667 8.533333 29.866667 8.533333 12.8 0 21.333333-4.266667 29.866667-12.8l102.4-102.4c17.066667-17.066667 17.066667-42.666667 0-59.733333-21.333333-12.8-46.933333-12.8-64 4.266667zM580.266667 878.933333H213.333333c-72.533333 0-128-55.466667-128-119.466666V230.4c0-64 55.466667-119.466667 128-119.466667h512c72.533333 0 128 55.466667 128 119.466667v140.8c0 25.6 17.066667 42.666667 42.666667 42.666667s42.666667-17.066667 42.666667-42.666667V230.4c0-115.2-93.866667-204.8-213.333334-204.8H213.333333C93.866667 25.6 0 119.466667 0 230.4v529.066667c0 115.2 93.866667 204.8 213.333333 204.8h366.933334c25.6 0 42.666667-17.066667 42.666666-42.666667s-21.333333-42.666667-42.666666-42.666667z"  />\n' +
    '</svg>')
  const $danmuOff = getIcon('danmu-off', '<?xml version="1.0" standalone="no"?>\n' +
    '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n' +
    '<svg viewBox="0 0 1152 1024" width="22" height="22" version="1.1" xmlns="http://www.w3.org/2000/svg">\n' +
    '<path fill="#fff" d="M311.296 661.504c0 4.096-4.096 8.704-8.704 12.8 0 4.096 0 4.096-4.096 8.704h-12.8c-4.096 0-8.704-4.096-16.896-8.704-8.704-8.704-16.896-8.704-25.6-8.704s-12.8 4.096-16.896 12.8c-4.096 12.8-8.704 21.504-4.096 29.696 4.096 8.704 12.8 16.896 25.6 21.504 16.896 8.704 34.304 16.896 47.104 16.896 12.8 0 21.504-4.096 34.304-8.704 8.704-4.096 16.896-16.896 25.6-29.696 8.704-12.8 12.8-34.304 16.896-55.296 4.096-21.504 4.096-51.2 4.096-85.504 0-12.8 0-21.504-4.096-29.696 0-8.704-4.096-12.8-8.704-16.896-4.096-4.096-8.704-8.704-12.8-8.704s-12.8-4.096-21.504-4.096H272.896s-4.096-4.096 0-8.704l4.096-38.4c0-4.096 0-8.704 4.096-8.704h47.104c16.896 0 25.6-4.096 34.304-12.8 8.704-8.704 12.8-21.504 12.8-42.496V324.096c0-16.896-4.096-34.304-8.704-42.496-12.8-12.8-25.6-16.896-42.496-16.896H243.2c-8.704 0-16.896 0-21.504 4.096-4.096 8.704-4.096 12.8-4.096 25.6 0 8.704 0 16.896 4.096 21.504 4.096 4.096 12.8 8.704 21.504 8.704H307.2c4.096 0 8.704 0 8.704 4.096v34.304c0 8.704 0 12.8-4.096 12.8 0 0-4.096 4.096-8.704 4.096h-34.304c-8.704 0-12.8 0-21.504 4.096-4.096 0-8.704 4.096-8.704 4.096-4.096 4.096-8.704 12.8-8.704 16.896 0 8.704-4.096 16.896-4.096 25.6l-8.704 72.704v29.696c0 8.704 4.096 12.8 8.704 16.896s8.704 4.096 16.896 8.704h68.096c4.096 0 8.704 0 8.704 4.096s4.096 8.704 4.096 16.896c0 21.504 0 42.496-4.096 55.296 0.512 9.216-3.584 22.016-8.192 26.624zM896 486.4c-93.696 0-175.104 51.2-217.6 123.904h-106.496v-34.304H640c21.504 0 34.304-4.096 42.496-12.8 8.704-8.704 12.8-21.504 12.8-42.496V358.4c0-21.504-4.096-34.304-12.8-42.496-8.704-8.704-21.504-12.8-42.496-12.8 0-4.096 4.096-4.096 4.096-8.704-4.096 0-4.096-4.096-4.096-4.096 4.096-12.8 8.704-21.504 4.096-25.6 0-8.704-4.096-12.8-12.8-21.504-8.704-4.096-16.896-4.096-21.504-4.096-8.704 4.096-12.8 8.704-21.504 21.504-4.096 8.704-8.704 12.8-12.8 21.504-4.096 8.704-8.704 12.8-12.8 21.504h-51.2c-4.096-8.704-8.704-16.896-8.704-21.504-4.096-8.704-8.704-12.8-12.8-21.504-4.096-12.8-12.8-16.896-21.504-16.896s-16.896 0-25.6 8.704C434.176 261.12 430.08 265.216 430.08 273.92c0 8.704 0 16.896 8.704 25.6l4.096 4.096 4.096 4.096c-16.896 0-29.696 4.096-38.4 12.8-8.704 4.096-12.8 21.504-12.8 38.4v157.696c0 21.504 4.096 34.304 12.8 42.496 8.704 8.704 21.504 12.8 42.496 12.8H512v34.304H413.696c-12.8 0-21.504 0-25.6 4.096-4.096 4.096-8.704 8.704-8.704 21.504v16.896c0 4.096 4.096 8.704 4.096 8.704 4.096 0 4.096 4.096 8.704 4.096H512V716.8c0 12.8 4.096 21.504 8.704 25.6 4.096 4.096 12.8 8.704 21.504 8.704 12.8 0 21.504-4.096 25.6-8.704 4.096-4.096 4.096-12.8 4.096-25.6v-55.296h80.896c-8.704 25.6-12.8 51.2-12.8 76.8 0 140.8 115.2 256 256 256s256-115.2 256-256S1036.8 486.4 896 486.4z m-328.704-128h55.296c4.096 0 4.096 0 4.096 4.096V409.6h-59.904V358.4z m0 102.4h59.904v51.2h-55.296V460.8h-4.608zM512 516.096H456.704v-51.2H512v51.2z m0-102.4H452.096v-51.2H512v51.2z m384 499.2c-93.696 0-170.496-76.8-170.496-170.496s76.8-170.496 170.496-170.496 170.496 76.8 170.496 170.496-76.8 170.496-170.496 170.496z"  />\n' +
    '<path fill="#fff" d="M580.096 879.104H213.504c-72.704 0-128-55.296-128-119.296V230.4c0-64 55.296-119.296 128-119.296h512c72.704 0 128 55.296 128 119.296v140.8c0 25.6 16.896 42.496 42.496 42.496s42.496-16.896 42.496-42.496V230.4c0-115.2-93.696-204.8-213.504-204.8h-512C93.696 25.6 0 119.296 0 230.4v528.896c0 115.2 93.696 204.8 213.504 204.8h367.104c25.6 0 42.496-16.896 42.496-42.496 0-25.6-21.504-42.496-43.008-42.496z m171.52 10.752c-15.36-15.36-15.36-40.96 0-56.32l237.568-237.568c15.36-15.36 40.96-15.36 56.32 0s15.36 40.96 0 56.32l-237.568 237.568c-15.36 15.36-40.448 15.36-56.32 0z"  />\n' +
    '</svg>')
  const $danmuConfig = getIcon('danmu-config', '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22" width="22" height="22">\n' +
    '    <path d="M16.5 8c1.289 0 2.49.375 3.5 1.022V6a2 2 0 00-2-2H4a2 2 0 00-2 2v10a2 2 0 002 2h7.022A6.5 6.5 0 0116.5 8zM7 13H5a1 1 0 010-2h2a1 1 0 010 2zm2-4H5a1 1 0 010-2h4a1 1 0 010 2z"></path>\n' +
    '    <path d="M20.587 13.696l-.787-.131a3.503 3.503 0 00-.593-1.051l.301-.804a.46.46 0 00-.21-.56l-1.005-.581a.52.52 0 00-.656.113l-.499.607a3.53 3.53 0 00-1.276 0l-.499-.607a.52.52 0 00-.656-.113l-1.005.581a.46.46 0 00-.21.56l.301.804c-.254.31-.456.665-.593 1.051l-.787.131a.48.48 0 00-.413.465v1.209a.48.48 0 00.413.465l.811.135c.144.382.353.733.614 1.038l-.292.78a.46.46 0 00.21.56l1.005.581a.52.52 0 00.656-.113l.515-.626a3.549 3.549 0 001.136 0l.515.626a.52.52 0 00.656.113l1.005-.581a.46.46 0 00.21-.56l-.292-.78c.261-.305.47-.656.614-1.038l.811-.135A.48.48 0 0021 15.37v-1.209a.48.48 0 00-.413-.465zM16.5 16.057a1.29 1.29 0 11.002-2.582 1.29 1.29 0 01-.002 2.582z"></path>\n' +
    '</svg>')

  function addControl () {
    art.controls.add({
      position: 'right',
      name: 'danmuku',
      click: function () {
        if (danmuku.isHide) {
          danmuku.show()
          art.notice.show = '弹幕显示'
          setStyle($danmuOn, 'display', null)
          setStyle($danmuOff, 'display', 'none')
        } else {
          danmuku.hide()
          art.notice.show = '弹幕隐藏'
          setStyle($danmuOn, 'display', 'none')
          setStyle($danmuOff, 'display', null)
        }
      },
      mounted ($ref) {
        append($ref, $danmuOn)
        append($ref, $danmuOff)
        tooltip($ref, '弹幕开关')

        if (danmuku.isHide) {
          setStyle($danmuOn, 'display', 'none')
          setStyle($danmuOff, 'display', null)
        } else {
          setStyle($danmuOn, 'display', null)
          setStyle($danmuOff, 'display', 'none')
        }

        art.on('artplayerPluginDanmuku:hide', () => {
          setStyle($danmuOn, 'display', 'none')
          setStyle($danmuOff, 'display', null)
        })

        art.on('artplayerPluginDanmuku:show', () => {
          setStyle($danmuOn, 'display', null)
          setStyle($danmuOff, 'display', 'none')
        })
      }
    })
  }

  function addSetting () {
    art.setting.add({
      width: 300,
      name: 'danmuku',
      html: '弹幕设置',
      tooltip: '更多设置',
      icon: $danmuConfig,
      selector: [
        {
          width: 300,
          html: '弹幕速度',
          icon: '',
          tooltip: option.speed,
          range: [option.speed, 1, 16, 2.5],
          onChange (item) {
            danmuku.config({
              speed: item.range
            })
            return item.range
          }
        },
        {
          width: 300,
          html: '字体大小',
          icon: '',
          tooltip: option.fontSize + 'px',
          range: [option.fontSize, 12, 35, 1],
          onChange (item) {
            danmuku.config({
              fontSize: item.range
            })
            return item.range + 'px'
          }
        },
        {
          width: 300,
          html: '不透明度',
          icon: '',
          tooltip: (option.opacity * 100) + '%',
          range: [option.opacity, 0, 1, 0.25],
          onChange (item) {
            danmuku.config({
              opacity: item.range
            })
            return (item.range * 100) + '%'
          }
        },
        {
          width: 300,
          html: '显示范围',
          icon: '',
          tooltip: '1/4',
          selector: [
            {
              default: option.margin[1] == '75%',
              html: '1/4',
              margin: [10, '75%']
            },
            {
              default: option.margin[1] == '50%',
              html: '半屏',
              margin: [10, '50%']
            },
            {
              default: option.margin[1] == '25%',
              html: '3/4',
              margin: [10, '25%']
            },
            {
              default: option.margin[1] == 10,
              html: '满屏',
              margin: [10, 10]
            }
          ],
          onSelect: function (item) {
            danmuku.config({
              margin: item.margin
            })
            return item.html
          }
        },
        {
          html: '弹幕防重叠',
          icon: '',
          tooltip: option.antiOverlap ? '开启' : '关闭',
          switch: option.antiOverlap,
          onSwitch (item) {
            danmuku.config({
              antiOverlap: !item.switch
            })
            item.tooltip = item.switch ? '关闭' : '开启'
            return !item.switch
          }
        },
        {
          html: '同步视频速度',
          icon: '',
          tooltip: option.synchronousPlayback ? '开启' : '关闭',
          switch: option.synchronousPlayback,
          onSwitch (item) {
            danmuku.config({
              synchronousPlayback: !item.switch
            })
            item.tooltip = item.switch ? '关闭' : '开启'
            return !item.switch
          }
        },
        {
          width: SETTING_ITEM_WIDTH,
          html: '搜索方式',
          icon: '',
          tooltip: option.sourceType == 'auto' ? '智能搜索' : (option.sourceType === 'search' ? '手动搜索' : '输入网址'),
          selector: [
            {
              default: option.sourceType == 'auto',
              html: '智能搜索',
              sourceType: 'auto'
            },
            {
              default: option.sourceType == 'search',
              html: '手动搜索',
              sourceType: 'search'
            },
            {
              default: option.sourceType == 'input',
              html: '输入网址',
              sourceType: 'input'
            }
          ],
          onSelect: function (item) {
            danmuku.config({
              sourceType: item.sourceType
            })
            return item.html
          }
        },
        {
          width: 300,
          html: '匹配标题',
          icon: '',
          tooltip: option.matchType == 'folder' ? '文件夹名' : '文件名',
          selector: [
            {
              default: option.matchType == 'folder',
              html: '文件夹名',
              matchType: 'folder'
            },
            {
              default: option.matchType == 'filename',
              html: '文件名',
              matchType: 'filename'
            }
          ],
          onSelect: function (item) {
            danmuku.config({
              matchType: item.matchType
            })
            return item.html
          }
        },
        {
          width: 300,
          html: '匹配集数',
          icon: '',
          tooltip: option.matchEsp == 'auto' ? '自动匹配' : '手动输入',
          selector: [
            {
              default: option.matchEsp == 'auto',
              html: '自动匹配',
              matchEsp: 'auto'
            },
            {
              default: option.matchEsp == 'input',
              html: '手动输入',
              matchEsp: 'input'
            }
          ],
          onSelect: function (item) {
            danmuku.config({
              matchEsp: item.matchEsp
            })
            return item.html
          }
        }
      ]
    })
  }

  addControl()
  addSetting()
}